package com.jymj.controller;

import com.jymj.common.annotation.SysLog;
import com.jymj.common.validator.ValidatorUtils;
import com.jymj.common.validator.group.AddGroup;
import com.jymj.common.validator.group.UpdateGroup;
import com.jymj.entity.SysXzqEntity;
import com.jymj.service.SysXzqService;
import com.jymj.utils.PageUtils;
import com.jymj.utils.Query;
import com.jymj.utils.R;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 系统行政区
 *
 * @author
 * @email
 * @date
 */
@RestController
@RequestMapping("/sys/xzq")
public class SysXzqController extends AbstractController {

    @Autowired
    private SysXzqService sysXzqService;

    /**
     * 所有列表
     *
     * @param params
     * @return
     */
    @RequestMapping("/list")
    //@RequiresPermissions("sys:xzq:list")
    public R list(@RequestParam Map<String, Object> params) {
        //只有超级管理员，才能查看所有行政区列表
        /*if (getUserId() != Constant.SUPER_ADMIN) {
            params.put("createUserId", getUserId());
        }*/

        //查询列表数据
        Query query = new Query(params);
        List<SysXzqEntity> xzqList = sysXzqService.queryList(query);
        int total = sysXzqService.queryTotal(query);

        PageUtils pageUtil = new PageUtils(xzqList, total, query.getLimit(), query.getPage());

        return R.ok().put("page", pageUtil);
    }

    @RequestMapping("queryXzqList")
    public R queryXzqList(Integer type,String code){
        List<SysXzqEntity> sysXzqEntities = sysXzqService.queryXzqList(code,type);
        return R.ok().put("data",sysXzqEntities);
    }

    @RequestMapping("/perms")
    @RequiresPermissions("sys:xzq:perms")
    public R perms() {
        //查询列表数据
        List<SysXzqEntity> menuList = sysXzqService.queryList(new HashMap<>());

        return R.ok().put("xzqList", menuList);
    }

    /**
     * 房屋权属 汇总（西红门） 首页数据 汇总
     *
     * @return
     */
    @RequestMapping("/hz")
    public R hz(String xzqmc,String code) {
        //查询列表数据
        List<SysXzqEntity> xzqEntities = sysXzqService.getXzqInfoList(getUserId(),xzqmc,code);
        return R.ok().put("data", xzqEntities);
    }

    /**
     * 角色授权行政区
     *
     * @return
     */
    @RequestMapping("/xzqList")
    public R xzqList() {
        //查询列表数据
        List<SysXzqEntity> xzqList = sysXzqService.getUserXzqList(getUserId());
        return R.ok().put("xzqList", xzqList);
    }

    /**
     * 行政区信息
     *
     * @param xzqId
     * @return
     */
    @RequestMapping("/info/{xzqId}")
    @RequiresPermissions("sys:xzq:info")
    public R info(@PathVariable("xzqId") Long xzqId) {
        SysXzqEntity xzq = sysXzqService.queryObject(xzqId);

        return R.ok().put("xzq", xzq);
    }

    /**
     * 保存行政区
     *
     * @param xzq
     * @return
     */
    @SysLog("保存行政区")
    @RequestMapping("/save")
    @RequiresPermissions("sys:xzq:save")
    public R save(@RequestBody SysXzqEntity xzq) {
        ValidatorUtils.validateEntity(xzq, AddGroup.class);
        sysXzqService.save(xzq);
        return R.ok();
    }

    /**
     * 修改行政区
     *
     * @param xzq
     * @return
     */
    @SysLog("修改行政区")
    @RequestMapping("/update")
    @RequiresPermissions("sys:xzq:update")
    public R update(@RequestBody SysXzqEntity xzq) {
        ValidatorUtils.validateEntity(xzq, UpdateGroup.class);
        sysXzqService.update(xzq);
        return R.ok();
    }

    /**
     * 删除行政区
     *
     * @param xzqIds
     * @return
     */
    @SysLog("删除行政区")
    @RequestMapping("/delete")
    @RequiresPermissions("sys:xzq:delete")
    public R delete(@RequestBody Long[] xzqIds) {
        sysXzqService.deleteBatch(xzqIds);
        return R.ok();
    }
}
